<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // spread扩展运算符
        //.扩展运算符（spread）也是三个点（...）。它好比 rest 参数的逆运算，将一个数组转为用逗号分隔的参数序列，对数组进行解包

        // 在Math的对象中有一个max计算最大值的方法
        console.log(Math.max(10,20,30)); //30
        // 如下有个数组，我们要获取里面的最大值
        const arr = [31, 24, 56, 78, 6];
        console.log(Math.max(arr)); // 不支持直接将数组作为参数使用
        console.log(Math.max(arr[0],arr[1],arr[2],arr[3],arr[4])); // 要一个个放上去
        
        // 针对上面这种情况，我们可以使用 扩展运算符...
        console.log(Math.max(...arr));  // 其中前面三个点就可以将数组arr拆开。


        // 将两个数组合并成一个新数组（同理对象也可以）
        const a1 = [10,20,30];
        const a2 = ["aa","bb","cc"];
        // 使用扩展运算符... 将 a1和a2合并出一个新数组
        const res = [...a1, ...a2];
        console.log(res);



        // 将对象ob 复制出（克隆）一个新对象、
        const ob = {name:"翠花", age:18, sex:"女"};
        //const oa = ob; // 此操作等价于为ob起个别名oa， 代表同一个东西
        const oa = {...ob}; // 此操作为复制对象，也就是克隆一份独立的对象
        console.log(ob === oa); // false
        ob.age = 20;
        console.log(oa);  // {name: '翠花', age: 18, sex: '女'}


        // 值类型的操作
        // let a = 10;
        // let b = a;
        // b = 20;
        // console.log(a); // 10

   </script>
</body>
</html>